Skip to content

fix(link-map): guard head conversion from memory to avoid overflow panic#2808

Closed
jrootcache wants to merge 1 commit into0xMiden:nextfrom
jrootcache:fix/link-map-head-guard
Closed

fix(link-map): guard head conversion from memory to avoid overflow panic#2808
jrootcache wants to merge 1 commit into0xMiden:nextfrom
jrootcache:fix/link-map-head-guard

Conversation

@jrootcache
Copy link
Copy Markdown

Problem

There is a potential panic in LinkMap::head() when the memory-stored head pointer cannot be converted to a u32 (e.g., due to memory corruption or an out-of-range value).

Fix

Make the conversion fallible-safe by replacing the unwrap/expect with .ok(), returning None when the pointer cannot be represented as u32. This prevents panics on edge cases and keeps behavior stable for malformed data.

Why this is safe

The head() method already treats invalid/missing head pointers as None. Using .ok() preserves the existing contract (None for invalid head) and avoids panics in rare edge cases without altering normal operation.

Copy link
Copy Markdown
Contributor

@bobbinth bobbinth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you - but I don't think this change is actually a good idea.

Comment on lines +98 to +100
// Be tolerant to potential malformed pointers: return None instead of panicking
// if the value cannot fit into a u32.
u32::try_from(head_ptr.as_canonical_u64()).ok()
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the pointer is malformed, it would mean that there is a serious bug in the transaction kernel and we should definitely either panic or return an error. So, returning None is probably not a good idea.

@bobbinth bobbinth closed this Apr 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants